export default (obj1: any, obj2: any):boolean => {
  return deepEqual(obj1,obj2)
}


function deepEqual(obj1: any, obj2: any): boolean {
  // 1. 如果是同一个引用，或者在基础类型情况下值相等，则为 true
  if (obj1 === obj2) {
    return true
  }

  // 2. 如果其中一个是 null/undefined，或者类型不同，则为 false
  if (
    obj1 === null ||
    obj2 === null ||
    typeof obj1 !== "object" ||
    typeof obj2 !== "object"
  ) {
    return false
  }

  // 3. 处理 Array 情况（因为 array.length 也要对比，或者遍历下标）
  if (Array.isArray(obj1) && Array.isArray(obj2)) {
    if (obj1.length !== obj2.length) {
      return false
    }
    // 递归比较数组每个元素
    for (let i = 0; i < obj1.length; i++) {
      if (!deepEqual(obj1[i], obj2[i])) {
        return false
      }
    }
    return true
  } else if (Array.isArray(obj1) || Array.isArray(obj2)) {
    // 一个是数组另一个不是，直接false
    return false
  }

  // 4. 普通对象：先比较 key 数量是否一致
  const keys1 = Object.keys(obj1)
  const keys2 = Object.keys(obj2)
  if (keys1.length !== keys2.length) {
    return false
  }

  // 5. 遍历 key，递归比较 value
  for (const key of keys1) {
    // 判断对方对象是否有此 key
    if (!Object.prototype.hasOwnProperty.call(obj2, key)) {
      return false
    }
    // 递归比较属性
    if (!deepEqual(obj1[key], obj2[key])) {
      return false
    }
  }

  return true
}